package br.com.news.activity;

import br.com.news.R;
import br.com.news.util.ConnectionUtils;
import br.com.news.util.Constantes;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

/**
 * Activity generica 
 * 
 * @author Thiago
 * @since 14/01/2013
 */
public abstract class GenericActivity extends Activity {

	public void onCreate(Bundle savedInstanceState) {
		try {
			super.onCreate(savedInstanceState);
			super.setContentView(getContentView());
			
			if (!ConnectionUtils.isOnline(this) && !(this instanceof ErroActivity)) {
				ErroActivity.chamaActivityErro(this, R.string.not_internet);
				finish();
				return;
			}
			
			/**
			 * Recupera os paramatros enviados para a activity
			 */
			recuperarParametros();
			
			/**
			 * Ação antes da construção da tela
			 */
			preConstruct();
			
			/**
			 * Faz mapeamento dos objetos do xml para a activity
			 */
			recuperaElementosDoXml();
			
			/**
			 * Instancia elementos do xml de acordo com uma lógica especifica
			 */
			instanciaElementosDoXml();
			
			/**
			 * Define o comportamento dos elementos do xml quando acontece algum evento
			 */
			defineAcaoDosElementos();
			
			/**
			 * Ação após construcao da tela
			 */
			postConstruct();
			
		} catch(Throwable e) {
            Log.e(Constantes.LOG, e.getMessage(), e);
            ErroActivity.chamaActivityErro(this, R.string.falha_erros);
			finish();
		}
	}
	
	/**
	 * Recupera parametros enviados para a activity
	 * 
	 * @throws Exception
	 */
	protected abstract int getContentView();
	protected void recuperarParametros() throws Exception {} 
	protected void preConstruct() throws Exception {}
	protected void recuperaElementosDoXml() throws Exception {}
	protected void instanciaElementosDoXml() throws Exception {}
	protected void defineAcaoDosElementos() throws Exception {}
	protected void postConstruct() throws Exception {}
	
}
